package com.example.dao;

import com.example.entity.ShopCart;
import org.apache.ibatis.annotations.Param;
import java.util.List;

public interface ShopCartDao {
    /**
     * 根据用户ID查询购物车列表
     * @param userId 用户ID
     * @return 购物车列表
     */
    List<ShopCart> findByUserId(@Param("userid") Integer userid);

    /**
     * 根据购物车ID查询
     * @param shopcartId 购物车项ID
     * @return 购物车项
     */
    ShopCart findById(@Param("shopcartId") Integer shopcartId);

    /**
     * 查询用户特定商品的购物车项
     * @param userid 用户ID
     * @param recipeid 商品ID
     * @return 购物车项
     */
    ShopCart findByUserAndRecipe(
            @Param("userid") Integer userid,
            @Param("recipeid") Integer recipeid
    );

    /**
     * 添加到购物车
     * @param shopCart 购物车项
     * @return 影响行数
     */
    int add(ShopCart shopCart);

    /**
     * 更新购物车商品数量
     * @param shopcartid 购物车项ID
     * @param num 新数量
     * @return 影响行数
     */
    int updateNum(
            @Param("shopcartid") Integer shopcartid,
            @Param("num") int num
    );

    /*
     * 删除购物车项
     * @param shopcartId 购物车项ID
     * @return 影响行数
     */
    int deleteById(@Param("shopcartid") Integer shopcartid);

    /*
     * 批量删除购物车项
     * @param ids ID列表
     * @return 影响行数
     */
    int deleteBatch(@Param("ids") List<Integer> ids);

    /*
     * 计算选中商品总价
     * @param ids ID列表
     * @return 总价格
     */
    Double calculateTotal(@Param("ids") List<Integer> ids);

    /*
     * 统计用户购物车商品数量
     * @param userId 用户ID
     * @return 商品数量
     */
    int countByUser(@Param("userid") Integer userid);
}